﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Data.Linq;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace DevEx
{
    public class CVatTu
    {
        private static QLVTDataContext GetDc()
        {
            QLVTDataContext dc = new QLVTDataContext();
            return dc;
        }
                
        public IQueryable<tblVatTu> SelectAllRecord()
        {
            QLVTDataContext dc = GetDc();

            var q = from p in dc.tblVatTus                    
                    orderby p.Ma_VatTu, p.VatTu
                    select p;
            return q;
        }

        public IQueryable<tblVatTu> SelectAllRecordByLoaiVatTu_Cuoi(String LoaiVatTu, Boolean cuoi)
        {
            QLVTDataContext dc = GetDc();

            var q = from p in dc.tblVatTus
                    where p.Ma_LoaiVatTu == LoaiVatTu && p.Cuoi == cuoi
                    orderby p.Ma_VatTu, p.VatTu
                    select p;
            return q;
        }

        public IQueryable<tblVatTu> SelectAllRecordByLoaiVatTu(String LoaiVatTu)
        {
            QLVTDataContext dc = GetDc();

            var q = from p in dc.tblVatTus
                    where p.Ma_LoaiVatTu == LoaiVatTu
                    orderby p.Ma_VatTu, p.VatTu
                    select p;
            return q;
        }

        public tblVatTu SelectRecordByID(int ID_VatTu)
        {
            QLVTDataContext dc = GetDc();

            var q = (from p in dc.tblVatTus where p.ID_VatTu == ID_VatTu select p).SingleOrDefault();
            return q;
        }

        public tblVatTu SelectRecordByName(String VatTu)
        {
            QLVTDataContext dc = GetDc();

            var q = (from p in dc.tblVatTus where p.VatTu == VatTu select p).SingleOrDefault();
            return q;
        }

        public tblVatTu SelectRecordByMaVatTu(String MaVatTu)
        {
            QLVTDataContext dc = GetDc();

            var q = (from p in dc.tblVatTus where p.Ma_VatTu == MaVatTu select p).SingleOrDefault();
            return q;
        }

        
        //Insert
        public void Insert(tblVatTu obj)
        {
            QLVTDataContext dc = GetDc();
            dc.tblVatTus.InsertOnSubmit(obj);
            dc.SubmitChanges();
        }
        //Delete
        public void Delete(int ID)
        {
            QLVTDataContext dc = GetDc();

            var VatTu = dc.tblVatTus.SingleOrDefault(p=>p.ID_VatTu == ID);
            dc.tblVatTus.DeleteOnSubmit(VatTu);
            dc.SubmitChanges();
        }
        //Update
        public void Update(tblVatTu obj)
        {
            QLVTDataContext dc = GetDc();
            dc.tblVatTus.Attach(obj);
            dc.Refresh(RefreshMode.KeepCurrentValues, obj);
            dc.SubmitChanges(ConflictMode.ContinueOnConflict);
        }

        public String GetNewMaVatTu(String MaLoaiVatTu, Boolean cuoi)
        {
            QLVTDataContext dc = GetDc();

            String kq="";
            if (cuoi)
            {
                //1. Lấy mã vật tư mới
                var max_MaVatTu = (from p in dc.tblVatTus where p.Ma_LoaiVatTu == MaLoaiVatTu select p.Ma_VatTu).Max();


                if (max_MaVatTu == null)
                {
                    kq = MaLoaiVatTu.Substring(0, 13) + "1";
                }
                else
                {
                    Double MaVatTu = Convert.ToDouble(max_MaVatTu.Substring(1, 13));
                    MaVatTu += 1;
                    if (MaVatTu.ToString("###.#").Length == 12)
                    {
                        kq = "A0" + MaVatTu.ToString();
                    }
                    else if (MaVatTu.ToString("###.#").Length == 13)
                    {
                        kq = "A" + MaVatTu.ToString();
                    }
                    else
                    {
                        MessageBox.Show("Lỗi dữ liệu Mã vật tư");
                    }
                    
                }
            }
            else
            { 
                //2. Lấy mã loại vật tư mới
                
                
                var max_MaVatTu = (from p in dc.tblVatTus where p.Ma_LoaiVatTu == MaLoaiVatTu select p.Ma_VatTu).Max();

                char[] ListMaLoai;
                ListMaLoai = max_MaVatTu.ToCharArray();
                int len = ListMaLoai.Length - 1;
                if (len < 13)
                {
                    MessageBox.Show("Mã vật tư < 13 ký tự");
                    len = 13;
                }

                // Lay ma voi loai vat tu
                int k = 0;
                for (int i = len; i > 0; i--)
                {
                    if (ListMaLoai[i].ToString() == "0")
                        k = i;
                    else
                        break;
                }

                kq = max_MaVatTu.Substring(1, k - 1);
                Double MaVatTu = Convert.ToDouble(kq);
                MaVatTu += 1;

                if (MaVatTu.ToString("###.#").Length == k - 2)
                {
                    kq = "A0" + MaVatTu.ToString();
                }
                else if (MaVatTu.ToString("###.#").Length == k - 1)
                {
                    kq = "A" + MaVatTu.ToString();
                }

                
                for (int i = k; i <= len; i++)
                    kq += "0";    
            }

            return kq;
            
        }
    }
}
